/**
 * DNA序列
 *
 * 描述
 * 一个 DNA 序列由 A/C/G/T 四个字母的排列组合组成。 G 和 C 的比例（定义为 GC-Ratio ）
 * 是序列中 G 和 C 两个字母的总的出现次数除以总的字母数目（也就是序列长度）。在基因工程中，
 * 这个比例非常重要。因为高的 GC-Ratio 可能是基因的起始点。
 * 给定一个很长的 DNA 序列，以及限定的子串长度 N ，请帮助研究人员在给出的 DNA 序列中从左往
 * 右找出 GC-Ratio 最高且长度为 N 的第一个子串。
 * DNA序列为 ACGT 的子串有: ACG , CG , CGT 等等，但是没有 AGT ， CT 等等
 *
 * 数据范围：
 * 字符串长度满足 1≤n≤1000  ，输入的字符串只包含 A/C/G/T 字母
 *
 * 输入描述：
 * 输入一个string型基因序列，和int型子串的长度
 *
 * 输出描述：
 * 找出GC比例最高的子串,如果有多个则输出第一个的子串
 */

import java.util.Scanner;

/**
 * 这里使用滑动窗口, 当长度小于 n 的时候, 就直观入窗口
 * 当 = n 的时候, 就可以判断条件, 更新最大的状态了
 * 当 > n 的时候, 就是左边出窗口的时候了, 这里只要出一次就可以了
 * 因为一旦大于他, 就被我们出窗口了
 * 这里会有一个小细节, 就是当我们比较是否更新的时候, 我们要 * 1.0
 * 转化为 double 进行比较
 * 时间复杂度 : O(n)
 * 空间复杂度 : O(1)
 */

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        String s = in.next();
        int n = in.nextInt();

        // 转化为 字符数组
        char[] nums = s.toCharArray();

        // 字符串长度
        int len = nums.length;

        // 起始位置, 窗口中 c g 的 数量
        int start = 0, k = 0;

        // c g 的比列
        double ret = -1.0;

        for (int left = 0, right = 0; right < len; right++) {

            // 入窗口, 是 c g k++
            if (nums[right] == 'C' || nums[right] == 'G') {
                k++;
            }

            // 大于 n 出窗口
            if (right - left + 1 > n) {

                // 出 是 c g k--
                if (nums[left] == 'C' || nums[left] == 'G') {
                    k--;
                }
                left++;
            }

            // 等于 n 判断是否需要更新, 这里不能放入 上面的判断条件, 虽然最后都是会是 n , 但是这样第一次
            // 为 n 的时候并不会被记录到
            if (right - left + 1 == n) {

                // 这里要 * 1.0
                double tmp = 1.0 * k / len;

                // 更新状态
                if (tmp > ret) {
                    start = left;
                    ret = tmp;
                }
            }
        }

        // 打印结果
        System.out.println(s.substring(start, start + n));
    }
}